
package dmon;

import java.io.IOException;
import java.net.*;

/**
 * Universidad Simón Bolívar
 * Curso de Redes I - Taller
 * Profesor: Ricardo Gonzalez
 * Trimestre Enero-Marzo 2011
 *
 * Proyecto 2 RD
 *
 * @author Grupo 9
 * @author Richard Simoes Ferreira
 * @author Ricardo Tocco
 *
 * @version 1.0
 */

public class ServerConnection extends Thread {
/**
 * Estructura que abstrae la ejecución del servidor dmon
 */
    private int puerto;
    private ControlDmon control;

    /**
     * Constructor de la clase ServerConnection
     * @param p Puerto bien conocido del servidor dmon
     * @param c Estructura de control de dmon
     */
    public ServerConnection (int p, ControlDmon c){
        this.puerto = p;
        this.control = c;
    }
    /**
     * Obtener el puerto bien conocido del servidor dmon
     * @return  el puerto bien conocido del servidor dmon
     */
    public int getPuerto(){
        return this.puerto;
    }
    /**
     * Establece el puerto bien conocido que utilizará el servidor dmon
     * @param p El puerto bien conocido que utilizará el servidor dmon
     */
    public void setPuerto(int p){
        this.puerto = p;
    }
    /**
     * Obtiene el estatus que controla el ciclo de servicio que ofrece el
     * servidor dmon
     * @return  estatus del servidor dmon
     */
    public boolean getStatus(){
        return control.getStatus();
    }
    /**
     * Cambia el estatus a false
     */
    public void terminar(){
        control.setStatusOff();
    }

    /**
     * Código que ejecuta el hilo encargado de implementar el servidor dmon
     */
    @Override
    public void run(){
        ServerSocket serverSocket = null;
        ErrorHandler errorH = new ErrorHandler();

        try {
            serverSocket = new ServerSocket(this.puerto);
            control.setStatusOn();

            while (control.getStatus()){
                new ServiceDmon(serverSocket.accept(),control).start();
            }
            try {
                serverSocket.close();
                System.out.print("Chao Servidor");
            } catch (IOException e) {
                errorH.errorSocketServerDisconnect(e);
            }
            
        } catch (IOException e){
            errorH.errorPuertoServerConnect(e, puerto);
        }
    }

}
